import argparse
import subprocess
from datetime import datetime, timedelta
from git_art_patterns import patterns  # 导入图案字典

def create_commits(start_date, pattern):
    # 由于每列代表一周，我们需要遍历矩阵的列
    for week in range(len(pattern[0])):
        # 遍历每列中的每一行（即每周的每一天）
        for day, days in enumerate(pattern):
            commit_count = days[week]
            commit_date = start_date + timedelta(weeks=week, days=day)
            for _ in range(commit_count):
                subprocess.run(
                    ['git', 'commit', '--allow-empty', '-m', 'Love commit', '--date', commit_date.strftime('%Y-%m-%dT%H:%M:%S%z')],
                    check=True
                )
                print(f"在 {commit_date.strftime('%Y-%m-%d')} 进行了提交")
    subprocess.run(['git', 'push', 'origin',  'master'], check=True)
    print("推送到远程仓库完成。")

def main(pattern_name, start_date_str):
    #patterns = git_art_patterns.patterns  # 使用模块中的patterns字典
    if pattern_name not in patterns:
        print(f"图案名称 '{pattern_name}' 不存在。可用的图案有: {', '.join(patterns.keys())}")
        return

    start_date = datetime.strptime(start_date_str, "%Y-%m-%d")
    if start_date.weekday() != 0:
        print("开始日期不是周一，请选择一个周一的日期。")
        return

    pattern = patterns[pattern_name]
    create_commits(start_date, pattern)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='在 Git 提交历史中创建特定的图案。')
    parser.add_argument('pattern_name', help='要创建的图案名称。')
    parser.add_argument('start_date', help='开始创建图案的日期，格式为 YYYY-MM-DD，必须是周一。')

    args = parser.parse_args()
    main(args.pattern_name, args.start_date)
